package com.foreveross.taskservice.common;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.lang3.StringUtils;

import com.foreveross.taskservice.common.model.AbstractTaskModel;
/**
 * 数据空间
 * 利用数据空间的标识，可以在redis里面将数据的维度划分开来
 * 好处是数据清晰，可以保存多天数据，且多天数据不会交叉
 * 可以利用正则来直接del部分拥有数据空间标识的数据
 * 在这里我将date和任务的createTime结合起来，yyyyMMdd 这样就可以区分今天的数据和昨天的数据
 * 在清理数据或持久化部分数据的时候特别有用
 * 
 * @author Administrator
 *
 */
public final class CacheDataSpace {
	private String spaceString;
	private Date date;
	private int type;
	private String dataType;
	private String str;

	/**
	 * 格式如下:yyyyMMdd0001
	 * 任务创建日期+任务类型标识
	 * @param d
	 * @param type
	 */
	public CacheDataSpace(Date d, int t) {
		this.date = d;
		this.type = t;
		this.spaceString = new SimpleDateFormat("yyyyMMdd").format(this.date)
				+ StringUtils.leftPad(type + "", 6, "0");
	}

	
	/**
	 * 格式如下:00001yyyyMMdd
	 * 任务创建日期+任务类型标识
	 * @param type
	 * @return 
	 */
	public CacheDataSpace(Date d, String t,String s) {
		this.date = d;
		this.dataType = t;
		this.str=s;
		this.spaceString = StringUtils.leftPad(dataType + "", 6, "0")+new SimpleDateFormat("yyyyMMdd").format(this.date)+str;
	}
	
	public CacheDataSpace(int type) {
		this(new Date(), type);
	}

	public CacheDataSpace (AbstractTaskModel model){
		this(model.getCreateTime(),model.getTaskType());
	}
	
	
	public String toString() {
		return spaceString;
	}

	public String getSpace() {
		return spaceString;
	}

	public Date getDate() {
		return date;
	}

	public int getType() {
		return type;
	}

	/**
	 * 返回一个默认的数据空间,yyyyMMdd000000
	 * 
	 * @return
	 */
	public final static CacheDataSpace Default() {
		return new CacheDataSpace(new Date(), TaskTypeConst.DEFAULT_TASKTYPE);
	}
	
	public final static CacheDataSpace AirFreightSpace() {
		return new CacheDataSpace(new Date(), TaskTypeConst.AIRFREIGHT_TASKTYPE);
	}

}
